# -*- coding: utf-8 -*-# 
'''
Created on 2012-1-5
TOP API: taobao.items.search request
@author: kom
@version: 1.0
'''

class ItemsSearchRequest(object): 
    
    """
    参数
    """
    apiParas = {}

    """ 
             商品是否为虚拟商品
     true：是虚拟商品
     false：不是虚拟商品
    """    
    def setAuctionFlag(self,auctionFlag):
        self.auctionFlag = auctionFlag
        self.apiParas["auction_flag"] = auctionFlag;

    def getAuctionFlag(self):
        return self.auctionFlag

    """
           商品是否为自动发货
    true：自动发货
    false：非自动发货
    """
    def setAutoPost(self,autoPost):
        self.autoPost = autoPost
        self.apiParas["auto_post"] = autoPost;

    def getAutoPost(self):
        return self.autoPost

    """ 
        商品所属类目Id。ItemCat中的cid。 可以通过taobao.itemcats.get取到
    """
    def setCid(self,cid):
        self.cid = cid
        self.apiParas["cid"] = cid

    def getCid(self):
        return self.cid

    """ 
    商品最高价格。单位:元。正整数，取值范围:0-100000000
     """
    def setEndPrice(self,endPrice):
        self.endPrice = endPrice
        self.apiParas["end_price"] = endPrice

    def getEndPrice(self):
        return self.endPrice

    """ 
     商品所属卖家的最大信用等级数，1表示1心，2表示2心……，设置此条件表示搜索结果里的商品，所属的卖家信用必须小于等于设置的end_score
    """
    def setEndScore(self,endScore):
        self.endScore = endScore
        self.apiParas["end_score"] = endScore


    def getEndScore(self):
        return self.endScore

    """ 
     * 商品30天内最大销售数，设置此条件表示搜索结果里的商品，最近成交量必须小于等于设置的end_volume
     """
    def setEndVolume(self,endVolume):
        self.endVolume = endVolume
        self.apiParas["end_volume"] = endVolume


    def getEndVolume(self):
        return self.endVolume

    """ 
     * 需返回的商品结构字段列表。可选值为Item中的以下字段：num_iid,title,nick,pic_url,cid,price,type,delist_time,post_fee；多个字段之间用“,” 分隔。如：iid,title。新增字段location（卖家地址，可以分别获取location.city,location.state）；score(卖家信用等级数),volume(最近成交量)
    新增字段：has_discount, num, is_prepay, promoted_service, ww_status, list_time
     """
    def setFields(self,fields):
        self.fields = fields
        self.apiParas["fields"] = fields

    def getFields(self):
        return self.fields

    """ 
    是否正品保障商品(既是如实描述，又是7天无理由退换货的商品，设置了这个属性时：is_prepay和promoted_service不能再行设置)，设置为true表示该商品是正品保障的商品，设置为false或不设置表示不判断这个属性
    """
    def setGenuineSecurity(self,genuineSecurity):
        self.genuineSecurity = genuineSecurity
        self.apiParas["genuine_security"] = genuineSecurity

    def getGenuineSecurity(self):
        return self.genuineSecurity

    """ 
    商品是否对会员打折
    """
    def setHasDiscount(self,hasDiscount):
        self.hasDiscount = hasDiscount
        self.apiParas["has_discount"] = hasDiscount
        
    def getHasDiscount(self):
        return self.hasDiscount

    """ 
    是否是3D淘宝的商品,置为false或为空表示不对是否3D商品进行判断
    """
    def setIs3D(self,is3D):
        self.is3D = is3D
        self.apiParas["is_3D"] = is3D

    def getIs3D(self):
        return self.is3D

    """ 
    是否支持货到付款，设置为true表示支持货到付款，设置为false或不设置表示不判断这个属性
    """
    def setIsCod(self,isCod):
        self.isCod = isCod
        self.apiParas["is_cod"] = isCod

    def getIsCod(self):
        return self.isCod

    """ 
     * 是否商城的商品，设置为true表示该商品是属于淘宝商城的商品，设置为false或不设置表示不判断这个属性
     """
    def setIsMall(self,isMall):
        self.isMall = isMall
        self.apiParas["is_mall"] = isMall

    def getIsMall(self):
        return self.isMall

    """ 
     * 是否如实描述(即:先行赔付)商品，设置为true表示该商品是如实描述的商品，设置为false或不设置表示不判断这个属性
     """
    def setIsPrepay(self,isPrepay):
        self.isPrepay = isPrepay
        self.apiParas["is_prepay"] = isPrepay

    def getIsPrepay(self):
        return self.isPrepay

    """ 
     * 所在市。如：杭州
     """
    def setLocationCity(self,locationCity):
        self.locationCity = locationCity
        self.apiParas["location.city"] = locationCity

    def getLocationCity(self):
        return self.locationCity

    """ 
     * 所在省。如：浙江
     """
    def setLocationState(self,locationState):
        self.locationState = locationState
        self.apiParas["location.state"] = locationState

    def getLocationState(self):
        return self.locationState

    """ 
     * 卖家昵称列表。多个之间用“,”分隔；最多支持5个卖家昵称。如:nick1,nick2,nick3。
     """
    def setNicks(self,nicks):
        self.nicks = nicks
        self.apiParas["nicks"] = nicks

    def getNicks(self):
        return self.nicks

    """ 
     * 是否淘1站代购商品，设置为true表示淘1站商品，设置为false或不设置表示不判断这个属性
     """
    def setOneStation(self,oneStation):
        self.oneStation = oneStation
        self.apiParas["one_station"] = oneStation


    def getOneStation(self):
        return self.oneStation

    """ 
     * 排序方式。格式为column:asc/desc,column可选值为: price, delist_time, seller_credit；如按价格升序排列表示为：price:asc。新增排序字段：volume（最近成交量）；新增排序字段：popularity(商品的人气值)
     """
    def setOrderBy(self,orderBy):
        self.orderBy = orderBy
        self.apiParas["order_by"] = orderBy

    def getOrderBy(self):
        return self.orderBy

    """ 
     * 页码。取值范围:大于零的整数。默认值为1,即默认返回第一页数据。用此接口获取数据时，当翻页获取的条数（page_no*page_size）超过10240,为了保护后台搜索引擎，接口将报错。所以请大家尽可能的细化自己的搜索条件，例如根据修改时间分段获取商品
     """
    def setPageNo(self,pageNo):
        self.pageNo = pageNo
        self.apiParas["page_no"] = pageNo

    def getPageNo(self):
        return self.pageNo

    """ 
     * 每页条数。取值范围:大于零的整数;最大值：200；默认值：40
     """
    def setPageSize(self,pageSize):
        self.pageSize = pageSize
        self.apiParas["page_size"] = pageSize

    def getPageSize(self):
        return self.pageSize

    """ 
     * 免运费（不设置包含所有邮费状态，设置为true结果只有卖家包邮的商品）不能单独使用，要和其他条件一起用才行。
     """
    def setPostFree(self,postFree):
        self.postFree = postFree
        self.apiParas["post_free"] = postFree

    def getPostFree(self):
        return self.postFree

    """ 
     * 可以根据产品Id搜索属于这个spu的商品。这个字段可以通过查询 taobao.products.get 取到
     """
    def setProductId(self,productId):
        self.productId = productId
        self.apiParas["product_id"] = productId

    def getProductId(self):
        return self.productId

    """ 
     * 是否提供保障服务的商品。可选入参有：2、4。设置为2表示该商品是“假一赔三”的商品，设置为4表示该商品是“7天无理由退换货”的商品
     """
    def setPromotedService(self,promotedService):
        self.promotedService = promotedService
        self.apiParas["promoted_service"] = promotedService

    def getPromotedService(self):
        return self.promotedService

    """ 
     * 商品属性。商品属性。可以搜到拥有和输入属性一样的商品列表。字段格式为：pid1:vid1;pid2:vid2.属性的pid调用 taobao.itemprops.get.v2取得，属性值的vid用taobao.itempropvalues.get取得vid。
     """
    def setProps(self,props):
        self.props = props
        self.apiParas["props"] = props

    def getProps(self):
        return self.props

    """ 
     * 搜索字段。 用来搜索商品的title以及对应产品的title。
     """
    def setQ(self,q):
        self.q = q
        self.apiParas["q"] = q

    def getQ(self):
        return self.q

    """ 
     * 商品最低价格。单位:元。正整数，取值范围:0-100000000。
     """
    def setStartPrice(self,startPrice):
        self.startPrice = startPrice
        self.apiParas["start_price"] = startPrice

    def getStartPrice(self):
        return self.startPrice
   
    """ 
     * 商品所属卖家的最小信用等级数，1表示1心，2表示2心……，设置此条件表示搜索结果里的商品，所属的卖家信用必须大于等于设置的 start_score。
     """
    def setStartScore(self,startScore):
        self.startScore = startScore
        self.apiParas["start_score"] = startScore

    def getStartScore(self):
        return self.startScore

    """ 
     * 商品30天内最小销售数，设置此条件表示搜索结果里的商品，最近成交量必须大于等于设置的start_volume。
     """
    def setStartVolume(self,startVolume):
        self.startVolume = startVolume
        self.apiParas["start_volume"] = startVolume

    def getStartVolume(self):
        return self.startVolume

    """ 
     * 商品的新旧状态。可选入参有：new、second、unused 。设置为new表示该商品是全新的商品，设置为second表示该商品是二手的商品，设置为unused表示该商品是闲置的商品
     """
    def setStuffStatus(self,stuffStatus):
        self.stuffStatus = stuffStatus
        self.apiParas["stuff_status"] = stuffStatus

    def getStuffStatus(self):
        return self.stuffStatus

    """ 
     * 旺旺在线状态（不设置结果包含所有状态，设置为true结果只有旺旺在线卖家的商品）不能单独使用，要和其他条件一起用才行。
     """
    def setWwStatus(self,wwStatus):
        self.wwStatus = wwStatus
        self.apiParas["ww_status"] = wwStatus

    def getWwStatus(self):
        return self.wwStatus


    def getApiMethodName(self):
        return "taobao.items.search"

    def getApiParas(self):
        return self.apiParas

    
    def check(self):
        pass
    """        
        RequestCheckUtil::checkMinValue(self.cid,0,"cid");
        RequestCheckUtil::checkMinValue(self.endPrice,0,"endPrice");
        RequestCheckUtil::checkMinValue(self.endScore,0,"endScore");
        RequestCheckUtil::checkMinValue(self.endVolume,0,"endVolume");
        RequestCheckUtil::checkNotNull(self.fields,"fields");
        RequestCheckUtil::checkMinValue(self.productId,0,"productId");
        RequestCheckUtil::checkMinValue(self.startPrice,0,"startPrice");
        RequestCheckUtil::checkMinValue(self.startScore,0,"startScore");
        RequestCheckUtil::checkMinValue(self.startVolume,0,"startVolume");
"""



    def __init__(self):
        '''
        Constructor
        '''
        self.apiParas = {}
        self.fields = "num_iid,title,nick,pic_url,cid,price,type,delist_time,post_fee,score,volume"
        self.apiParas["fields"] = self.fields

if __name__ == '__main__':
    it =ItemsSearchRequest()
    it.setProductId(3)
    print it.getApiParas()